# 玩家角色类，继承自CharacterBody2D
class_name Player
extends CharacterBody2D

# 准备就绪时自动获取子节点中的攻击组件
@onready var hit_component: HitComponent = $HitComponent
@onready var hurt_component: HurtComponent = $HurtComponent
@onready var damage_component: DamageComponent = $DamageComponent
@onready var weapon_holder: WeaponHolder = $WeaponHolder

# 当前使用的工具，默认为None（无工具）
var current_tool: DataTypes.Tools = DataTypes.Tools.None
# 当前装备的武器
var equipped_weapon: WeaponBase = null
# 玩家当前移动方向向量
var player_direction: Vector2 = Vector2.ZERO


# 节点初始化时调用
func _ready() -> void:
	# 连接工具管理器的工具选择信号到本地处理方法
	ToolManager.tool_selected.connect(on_tool_selected)
	add_to_group("player")


# 工具选择信号处理方法
func on_tool_selected(tool: DataTypes.Tools)->void:
	# 更新当前工具
	current_tool = tool
	# 同步更新攻击组件的当前工具
	hit_component.current_tool = tool


func equip_weapon(weapon: WeaponBase) -> void:
	weapon_holder.equip_weapon(weapon)
	# 更新玩家的equipped_weapon引用
	equipped_weapon = weapon

	print("武器已装备!")


# 攻击输入，假定左键攻击
func _unhandled_input(event):
	if event.is_action_pressed("attack") and equipped_weapon:
		equipped_weapon.attack() # 可传入目标或检测范围目标


# 血量管理相关（将掉血、死亡委托health_component，一般通过信号/方法驱动）
func take_damage(_amount: int) -> void:
	pass


func is_dead() -> bool:
	return false


# 死亡处理（常由HealthComponent发信号调用此函数）
func on_death():
	set_process(false)
	visible = false
	# 可触发复活/游戏结束等逻辑
